使用時機: 當想要有一些特性又不想要改變原本的物件方法
我們可以把模組想成是擁有許多方法和常數的工具箱。
模組其實和類別的概念很相似,但模組不能建構實例(instance),而且也不會有子類別(subclass),它只是用來儲存東西的。但在模組中不太會包含變數(variable),因為變數可能會變動。但如果是常數的話,因為不太會變動因此我們可以把一些固定的常數存在模組中。
透過關鍵字 module
來建立模組,命名規則與 class 相同,使用駝峰大寫
module Flyable #模組
def fly
puts "I believe I can fly!"
end
end
class Cat
include Flyable #引入模組
end
kitty = Cat.new
kitty.fly
如果我們想要把 module 引用到 class 中時,我們可以使用關鍵字 include
或 extend
。
include
: 在實例中引用module 的方法extend
: 在類別本身中引用module 的方法。include
用於將模組的方法添加到類別的實例方法中。include
通常用於將共享的功能添加到多個類中,實現代碼重用。module Greeting
def say_hello
puts "Hello!"
end
end
class Person
include Greeting
end
person = Person.new
person.say_hello # 調用模組中的方法
extend
用於將模組的方法添加到類的類方法(類方法也稱為單例方法)中。module Logging
def log(message)
puts "Log: #{message}"
end
end
class MyClass
extend Logging
end
MyClass.log("This is a log message") # 調用模組中的方法
參考資料:
https://pjchender.dev/ruby-on-rails/ruby-object/
https://railsbook.tw/chapters/08-ruby-basic-4